﻿using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace GIFT
{
    public partial class VentanaActividad : Form
    {
        public VentanaActividad(String nombre, InterfazPrincipal vPrincipal, ArrayList comandos)
        {
            controlActividad = new ControlActividad();
            modificado = false;
            Principal = vPrincipal;
            Nombre = nombre; //pone el nombre
            InitializeComponent();
            this.Name = Nombre;
            this.Text = Nombre;
            campoNombreActividad.Text = Nombre;
            campoActualizacionActividad.Text = DateTime.Now.ToString();
            actividad = null;
            llenarListaComandos(comandos);
        }

        /****************************** Metodos Set *************************************/

        //Le da valor al campo Nombre Actividad
        public void setNombreActividad(String nombre)
        {
            campoNombreActividad.Text = nombre;
            actividad.setNombre(nombre);
        }

        //Le da valor al campo descripcion Actividad
        public void setDescripcionActividad(String descripcion)
        {
            campoDescripcionActividad.Text = descripcion;
            actividad.setdescripcion(descripcion);
        }

        //Le da valor al campo fecha actualizacion Actividad
        public void setActualizacionActividad(String actualizacion)
        {
            campoActualizacionActividad.Text = actualizacion;
            actividad.setFechaActualizacion(actualizacion);
        }

        //Le da valor al tipo de Actividad
        public void setTipo(String tipo) 
        {
            if (tipo == "Inicial") 
            {
                campoOpcionTipoFinal.Checked = true;
                actividad.setTipo("Inicial");
            }
            if (tipo == "Tramite")
            {
                campoOpcionTipoTramite.Checked = true;
                actividad.setTipo("Tramite");
            }
            else 
            {
                campoOpcionTipoFinal.Checked = true;
                actividad.setTipo("Final");
            }
        }

        //Le da valor al estado inicial Actividad
        public void setEstadoInicial(String inicial) 
        {
            campoEstadoInicialActividad.Text = inicial;
            actividad.setEstadoInicial(inicial);
        }

        //Le da valor al estado final Actividad
        public void setEstadoFinal(String final)
        {
            CampoEstadoFinalActividad.Text = final;
            actividad.setEstadoFinal(final);
        }

        //Le asigna el valor al plazo de la actividad
        public void setPlazo(String valor)
        {
            if (valor != "")
            {
                //escogeFecha.CustomFormat = campoDespliegueFecha.ToString();
                //escogeFecha.Format = DateTimePickerFormat.Custom;
                campoPlazoActividad.Text = valor;
                actividad.setPlazo(valor);
            }
        }

        //Le da valor a la cardinalidad de la actividad
        public void setCardinalidad(String cardinalidad) 
        {
            if (cardinalidad == "Simple")
            {
                opcionSimple.Checked = true;
                actividad.setCardinalidad("Simple");
            }
            else 
            {
                opcionCompuesta.Checked = true;
                actividad.setCardinalidad("Compuesta");
            }
        }

        //Le da valor a la ocpion de repetible de la actividad
        public void setRepetible(String valor) 
        {
            if (valor == "true")
            {
                campoRepetible.Checked = true;
                actividad.setRepetible("true");
            }
            else { campoRepetible.Checked = false; actividad.setRepetible("false"); }
        }

        //Le da valor a la ocpion de masiva de la actividad
        public void setMasiva(String valor)
        {
            if (valor == "true")
            {
                campoOpcionMasiva.Checked = true;
                actividad.setMasiva("true");
            }
            else { campoOpcionMasiva.Checked = false; actividad.setMasiva("false"); }
        }

        //Le da valor a los comandos de una actividad
        public void setComandos(ArrayList comandos) 
        {
            for (int i = 0; i < comandos.Count; ++i) 
            {
                campoComandosDeActividad.Items.Add(comandos[i].ToString());
            }
            actividad.setComandos(comandos);
        }
 
        //Le da valor al campo actividad
        public void setActividad(Actividad Act)
        {
            actividad = Act;
            setNombreActividad(actividad.getNombre());
            setDescripcionActividad(actividad.getdescripcion());
            setActualizacionActividad(actividad.getFechaActualizacion());
        }

        /****************************** Metodos Get *************************************/

        //Retorna el valor del campo Nombre Actividad
        public String getNombreActividad()
        {
            return campoNombreActividad.Text;
        }

        //Retorna el valor del campo descripcion Actividad
        public String getDescripcionActividad()
        {
            return campoDescripcionActividad.Text;
        }

        //Retorna el valor del campo fecha actualizacion Actividad
        public String getActualizacionActividad()
        {
            return campoActualizacionActividad.Text;
        }

        //Retorna el valor del tipo de Actividad
        public String getTipo() 
        {
            String tipo;
            if (campoOpcionTipoInicial.Checked == true)
            {
                tipo = "Inicial";
            }
            else 
            {
                if (campoOpcionTipoTramite.Checked == true)
                {
                    tipo = "Tramite";
                }
                else 
                {
                    tipo = "Final";
                }
            }
            return tipo;
        }

        //Retorna el valor del estado inicial de Actividad
        public String getEstadoInicial() 
        {
            return campoEstadoInicialActividad.Text;
        }

        //Retorna el valor del estado final de Actividad
        public String getEstadoFinal() 
        {
            return CampoEstadoFinalActividad.Text;
        }

        //Retorna el valor del plazo de Actividad
        public String getPlazo() 
        {
            return campoPlazoActividad.Text;
        }

        //Retorna el valor de la cardinalidad de Actividad
        public String getCardinalidad()
        {
            String tipo;
            if (opcionSimple.Checked  == true)
            {
                tipo = "Simple";
            }
            else
            {
                tipo = "Compuesta";
            }
            return tipo;
        }

        //Retorna el valor repetible de Actividad
        public String getRepetiblea()
        {
            if (campoRepetible.Checked == true) { return "true"; }
            else { return "false"; }
        }

        //Retorna el valor masiva de Actividad
        public String getMasiva() 
        {
            if (campoOpcionMasiva.Checked == true) { return "true"; }
            else { return "false"; }
        }

        //Retorna el nombre de los comandos de Actividad
        public ArrayList getComandos() 
        { 
            ArrayList comandos = new ArrayList();
            for (int i = 0; i < campoComandosDeActividad.Items.Count; ++i) 
            {
                comandos.Add(campoComandosDeActividad.Items[i].ToString());
            }
            return comandos;
        }

        /********************************************************************************/

        //Llena la lista de comandos 
        public void llenarListaComandos(ArrayList comandos)
        {
            for (int i = 0; i < comandos.Count; ++i)
            {
                campoBancoComandos.Items.Add(comandos[i].ToString());
            }
        }

        //Captura evento opcion repetible
        private void radioButton1_CheckedChanged(object sender, EventArgs e)
        {
            if (opcionSimple.Checked)
            {
                campoRepetible.Enabled = true;
                groupBox_comandos.Enabled = true;
                opcionCompuesta.Enabled = false;
                opcionSimple.Enabled = false;
            }
            else
            {
                campoRepetible.Enabled = false;
                groupBox_comandos.Enabled = false;
            }
            botonEstablecerRelacionActividad.Enabled = true;
        }

        //Captura el evento del cambio de indice en la lista de comandos
        private void campoBancoComandos_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (campoBancoComandos.Text != "")
            {
                botonAgregarComando.Enabled = true;
            }
            else
            {
                botonAgregarComando.Enabled = false;
            }
        }

        //Captura el evento del cambio de indice en la lista de comandos de la actividad
        private void campoComandosDeActividad_SelectedIndexChanged(object sender, EventArgs e)
        {
            if(campoComandosDeActividad.Text != "")
            {
                botonQuitarComando.Enabled = true;
                if (campoComandosDeActividad.SelectedIndex == 0)
                {
                    botonSubirComando.Enabled = false;
                }
                else
                {
                    botonSubirComando.Enabled = true;
                }
                if (campoComandosDeActividad.SelectedIndex == campoComandosDeActividad.Items.Count-1)
                {
                    botonBajarComando.Enabled = false;
                }
                else
                {
                    botonBajarComando.Enabled = true;
                }

            }
            else
            {
                botonQuitarComando.Enabled = false;
            }
        }

        //Captura el evento del click en agregar comando
        private void botonAgregarComando_Click(object sender, EventArgs e)
        {
            campoComandosDeActividad.Items.Add(campoBancoComandos.Text);
        }

        //Captura el evento del click en quitar comando
        private void botonQuitarComando_Click(object sender, EventArgs e)
        {
            campoComandosDeActividad.Items.Remove(campoComandosDeActividad.SelectedItem);
        }

        //Captura el evento del click en subir comando
        private void botonSubirComando_Click(object sender, EventArgs e)
        {
            //Realiza la operacion de cambiar el orden en la lista
            object temp1 = campoComandosDeActividad.SelectedItem;
            object temp2 = campoComandosDeActividad.Items[campoComandosDeActividad.SelectedIndex - 1];
            campoComandosDeActividad.Items[campoComandosDeActividad.SelectedIndex - 1] = temp1;
            campoComandosDeActividad.Items[campoComandosDeActividad.SelectedIndex] = temp2;
            campoComandosDeActividad.SelectedIndex = campoComandosDeActividad.SelectedIndex - 1;
        }

        //Captura el evento del click en bajar comando
        private void botonBajarComando_Click(object sender, EventArgs e)
        {
            //Realiza la operacion de cambiar el orden en la lista
            object temp1 = campoComandosDeActividad.SelectedItem;
            object temp2 = campoComandosDeActividad.Items[campoComandosDeActividad.SelectedIndex + 1];
            campoComandosDeActividad.Items[campoComandosDeActividad.SelectedIndex + 1] = temp1;
            campoComandosDeActividad.Items[campoComandosDeActividad.SelectedIndex] = temp2;
            campoComandosDeActividad.SelectedIndex = campoComandosDeActividad.SelectedIndex + 1;
        }

        //Captura el evento del click en relaciones de actividad
        private void botonEstablecerRelacionActividad_Click(object sender, EventArgs e)
        {
            VentanaRelacionActividades rel = new VentanaRelacionActividades(this.actividad);
            rel.ShowDialog();
        }

        private void opcionCompuesta_CheckedChanged(object sender, EventArgs e)
        {
            botonEstablecerRelacionActividad.Enabled = true;
            opcionCompuesta.Enabled = false;
            opcionSimple.Enabled = false;
        }

        //Manda a guardar un archivo
        public void guardarArchivo()
        {
            DialogResult dr = MessageBox.Show("Desea guardar los cambios de " + Nombre + "?", "Guardar", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
            switch (dr)
            {
                case DialogResult.Yes: //en caso de que desee guardar
                    controlActividad.guardar(actividad);
                    TreeNode tnode = new TreeNode(Nombre);
                    Principal.GetTreeView().Nodes[0].Nodes[3].Nodes.Add(tnode); //Agrega el nodo
                    modificado = false;
                    botonGuardar.Enabled = false;
                    break;
                case DialogResult.No: break;
            }
        }

        //Manda a hacer una copia del numero
        public void hacerCopia()
        {
            GuardarComo guardar = new GuardarComo(Principal, "actividad", this);
            guardar.Show();
        }

        //Manda a borrar el archivo
        public void borrarArchivo()
        {
            //confirma el borrado
            DialogResult dr = MessageBox.Show("Está seguro que desea borrar el actividad?", "Borrar actividad", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
            switch (dr)
            {
                case DialogResult.Yes: //en caso de que desee borrarlo
                    controlActividad.borrar(Nombre);
                    Principal.habilitacionCampos();
                    Principal.GetControlInterfaz().quitarNodo(Principal.GetTreeView(), Nombre, "actividad");
                    this.Close();
                    break;
                case DialogResult.No: break;
            }
        }

        //Captura el evento de cuando la ventana es enfocada
        private void VentanaEnfocada(object sender, EventArgs e)
        {
            Principal.ventanaEnfocada(this, "actividad"); //Manda a ponerse como la enfocada
        }

        //Captura el evento de cuando la ventana es desenfocada
        private void VentanaDesenfocada(object sender, EventArgs e)
        {
            Principal.ventanaEnfocada(null, ""); //Manda a quitarse como la enfocada
        }

        //Captura el evento que suceda antes de cerrar la ventana
        private void click_cerrarVentana(object sender, FormClosingEventArgs e)
        {
            if (modificado)
            {
                guardarArchivo();
            }
            Principal.ventanaEnfocada(null, ""); //Manda a quitarse como la enfocada
        }

        //Captura el click en el boton cerrar de una pestana
        private void botonCerrar_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        //Captura el click en el boton borrar de una pestana
        private void botonEliminar_Click(object sender, EventArgs e)
        {
            borrarArchivo();
        }

        //Captura el click en el boton guardar de una pestana
        private void botonGuardar_Click(object sender, EventArgs e)
        {
            guardarArchivo();//manda a guardar el archivo
        }

        //Captura el click en el boton guardarComo de una pestana
        private void botonGuardarComo_Click(object sender, EventArgs e)
        {
            hacerCopia();
        }

    }//fin de la calse
}
